#pragma once
#include "DVector4.h"
#include "DVector3.h"
#include "DQuaternion.h"

namespace Skill
{
	namespace Ode
	{
		void DVector4::CollectManagedMemory()
		{
		}

		dReal DVector4::default::get(int index)
		{
			return _This[index];
		}
		void DVector4::default::set(int index , dReal value)
		{
			_This[index] = value;
		}

		VALUE_PROP_DEFINITION_GETSET(DVector4,_This[0],dReal,X);
		VALUE_PROP_DEFINITION_GETSET(DVector4,_This[1],dReal,Y);
		VALUE_PROP_DEFINITION_GETSET(DVector4,_This[2],dReal,Z);
		VALUE_PROP_DEFINITION_GETSET(DVector4,_This[3],dReal,W);

		void DVector4::SetDQfromW(DVector3^ w, DQuaternion^ q)
		{
			dDQfromW(_This, w->_This,q->_This);
		}
		DVector4^ DVector4::DQfromW(DVector3^ w, DQuaternion^ q)
		{
			DVector4^ result = gcnew DVector4();
			dDQfromW(result->_This, w->_This,q->_This);
			return result;
		}

		void DVector4::SetZero()
		{
			dSetZero(_This,4);
		}
		void DVector4::SetValue(dReal value)
		{
			dSetValue(_This,4,value);
		}
		dReal DVector4::Dot(DVector4^ a,DVector4^ b)
		{
			return dDot(a->_This,b->_This,4);
		}

		void DVector4::Scale(DVector4^ d)
		{
			dVectorScale(_This,d->_This,4);
		}
	}
}